package br.com.leopard.erp.gym.session;

import java.io.Serializable;
import java.util.Set;

import javax.enterprise.context.SessionScoped;
import javax.inject.Inject;
import javax.inject.Named;

import br.com.leopard.erp.gym.mapeamento.base_sistema.Usuario;
import br.com.leopard.erp.gym.negocio.AcaoNegocio;

@SessionScoped
@Named
public class UsuarioSession implements Serializable {

	@Inject
	private AcaoNegocio acaoNegocio;

	@Inject
	private AplicacaoScope aplicacaoScope;

	private Usuario usuarioLogado;

	private static final long serialVersionUID = 1L;

	private Set<String> permissoesUsuarioLogado;

	public Usuario getUsuarioLogado() {
		return usuarioLogado;
	}

	public void recarregarPermissoesUsuario() {
		permissoesUsuarioLogado = acaoNegocio.getAcoesPermitidasUsuario(usuarioLogado);
	}

	public void setUsuarioLogado(Usuario usuarioLogado) {
		this.usuarioLogado = usuarioLogado;
		permissoesUsuarioLogado = acaoNegocio.getAcoesPermitidasUsuario(usuarioLogado);
		
	}

	public boolean isEmpresaAdministradora() {
		Object idEmpresaAdministradoraObject = aplicacaoScope.getIdEmpresaAdministradora();

		if (idEmpresaAdministradoraObject == null) {
			return false;
		}

		if (isUsuarioMaster()) {
			return true;
		}

		return false;
	}

	public boolean isUsuarioMaster() {
		Object idUsuarioMasterParam = aplicacaoScope.getIDUsuarioMaster();

		if (idUsuarioMasterParam == null) {
			return false;
		}

		Long idUsuarioMaster = Long.parseLong(idUsuarioMasterParam.toString());

		if (usuarioLogado.getIdUsuario().equals(idUsuarioMaster)) {
			return true;
		}

		return false;
	}

	public boolean isPermissaoUsuarioConcedida(String valorPermissao) {
		if (isUsuarioMaster()) {
			return true;
		}

		return permissoesUsuarioLogado.contains(valorPermissao.toUpperCase());
	}

}
